/**
  ******************************************************************************
  * @file    delay.c 
  * @author  https://gitee.com/hyk-aajjjj33
  * @version V1.0.0
  * @date    2024-12-26
  * @brief   延时函数（滴答定时器）
  ******************************************************************************
  * @attention
  *            
  * 
  *
  ******************************************************************************
  
**/

/* Includes ------------------------------------------------------------------*/
#include "delay.h"


/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
  * @brief  延时微秒
  * @param  nus 指的是要延时的时间
  * @retval None
  * @note   参数不可以超过798915us
  */
void delay_us(uint32_t nus)
{
	SysTick->CTRL = 0; 			// 关闭定时器
	SysTick->LOAD = 9*nus - 1 ;// 设置重载值
	SysTick->VAL  = 0; 			// 清除当前值
	SysTick->CTRL = 1; 			// 开启定时器，并且使用外部时钟 21MHZ
	while ((SysTick->CTRL & 0x00010000)==0);// 等待计数完成
	SysTick->CTRL = 0; 			// 关闭定时器
}

/**
  * @brief  延时毫秒
  * @param  nms 指的是要延时的时间
  * @retval None
  * @note   参数不可以超过798ms
  */
void delay_ms(uint32_t nms)
{
	
	SysTick->CTRL = 0; 				 // 关闭定时器
	SysTick->LOAD = 9*nms*1000 - 1 ;	 // 设置重载值
	SysTick->VAL  = 0; 				 // 清除当前值
	SysTick->CTRL = 1; 				 // 开启定时器，并且使用外部时钟 21MHZ 
	while ((SysTick->CTRL & 0x00010000)==0);// 等待计数完成
	SysTick->CTRL = 0; 			     // 关闭定时器		
}

/**
  * @brief  延时秒
  * @param  ns 指的是要延时的时间
  * @retval None
  * @note   None
  */
void delay_s(uint32_t ns)
{
	for(;ns>0;ns--)
	{
		delay_ms(500);
		delay_ms(500);
	}
}

/************************ (C) COPYRIGHT HYK *****END OF FILE****/

